package ipdesk.model.user.action;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;

import ecg.encrypt.Encrypt;
import ecg.itf.dao.ECGDao;
import ecg.util.Time;

import ipdesk.common.Codes;
import ipdesk.model.report.promote.dao.PromoteInfoDao;
import ipdesk.model.user.bean.UserBean;
import ipdesk.model.user.dao.UserDao;


public class UserLoginAction extends ActionSupport implements Preparable, ModelDriven<UserBean>
{
	private UserBean userBean;
	private String message;
	private UserBean userDetail;
	
	// 로그인 처리
	public String execute() throws Exception
	{
		
		if(userBean.getUserPassword() != null && userBean.getUserEmail() != null)
		{
			String inputPassword = Encrypt.encryption(userBean.getUserPassword(), null);
			
			UserBean userInfoBean = UserDao.getInstance().getUserInfo(userBean);
			
			
			// 비밀번호 비교시 일치하면 세션 생성.
			if(userInfoBean != null && inputPassword.equals(userInfoBean.getUserPassword()))
			{
				ActionContext context = ActionContext.getContext(); //session을 생성하기 위해
				Map<String, String> session = (Map<String, String>)context.getSession();// Map 사용시
				
				session.put("userEmail", userBean.getUserEmail());
				session.put("userName", userInfoBean.getUserName());
				session.put("authCode", userInfoBean.getAuthCode());
				session.put("orgCode", userInfoBean.getOrgCode());
				session.put("deskCode", userInfoBean.getDeskCode());
				session.put("userSeq", userInfoBean.getUserSeq());
				session.put("deskCodeValue", Codes.getInstance().getDeskCode(userInfoBean.getDeskCode()));
				
				context.setSession(session);
				
				/*
				 * 1. 로그인 시간 및 로그인 IP 업데이트
				 */
				HttpServletRequest request = ServletActionContext.getRequest();
				
				userBean.setLastLoginIp(request.getRemoteAddr());
				userBean.setLastLoginTime(Time.getDateTime());
				
				UserDao.getInstance().lastLoginInfoUpdate(userBean);

				System.out.println(ActionContext.getContext().getSession().get("authCode"));
				
				return SUCCESS;
			}
			else
			{
				message = "아이디 또는 비밀번호가 올바르지 않습니다";
				
				return LOGIN;
			}
		}
		else
		{
			return LOGIN;
		}
	}
	
	// 로그아웃 처리
	public String logoutExecute() throws Exception
	{
		ActionContext context = ActionContext.getContext();
		Map<String, String> session = (Map<String, String>)context.getSession();
		if(session.get("userEmail") != null)
		{
		  session.remove("userEmail");
		}
		
		context.setSession(session);//다시 session 을 적용 시켜서 초기화 시킨다. 

		return SUCCESS;
	}
	
	// 정보수정 처리
	public String modfiyExecute() throws Exception
	{
		/**
		 * 1. 빈객체를 dao로 넘긴다.
		 * 2. DB에서 불러온 비밀번호와 폼에서 넘어온 기존 비밀번호를 비교해서 일치하면 새로운 비밀번호로 업데이트한다.
		 * 3. 틀리다면 롤백시킨다.
		 */
		
		if(userBean.getUserPassword() != null && userBean.getUserEmail() != null)
		{
			String inputPassword = Encrypt.encryption(userBean.getUserPassword(), null);
			
			
			UserBean userInfoBean = UserDao.getInstance().getUserInfo(userBean);
			
			// 비밀번호 비교시 일치하면 새로운 비밀번호로 업데이트.
			if(userInfoBean != null && inputPassword.equals(userInfoBean.getUserPassword()))
			{
				String newPassword =  Encrypt.encryption(userBean.getUserPassword1(), null);
				
				userBean.setUserPassword(newPassword);
				
				UserDao.getInstance().updatePassword(userBean);
			}
			else
			{
				message = "아이디 또는 비밀번호가 올바르지 않습니다";
				
				return LOGIN;
			}
		}
		else
		{
			return LOGIN;
		}
		
		
		return SUCCESS;
	}
	public String getMessage()
	{
		return message;
	}


	public void setMessage(String message)
	{
		this.message = message;
	}


	public void prepare() throws Exception
	{
		userBean = new UserBean();
	}
	
	public UserBean getModel()
	{
		return userBean;
	}
}
